/////////////////////////////////////////////////////////////////////////
///@company AcceleCom
///@file xtf_api_datatype.h
///@brief 定义了协议报单接口使用到的数据类型
///@history 
/////////////////////////////////////////////////////////////////////////

#ifndef __XTF_API_DATATYPE_H__
#define __XTF_API_DATATYPE_H__

/// FAIR报单消息ID 
#define XELE_MID_ORDER_INSERT   0x65
/// FAIR撤单消息ID 
#define XELE_MID_ORDER_ACTION   0x67
/// FAIR组合消息ID 
#define XELE_MID_ORDER_COMB     0x69

/////////////////////////////////////////////////////////////////////////
///备注: 基本数据类型，其中 uint8_t 表示的是1字节整型， char表示1字节字符型
/////////////////////////////////////////////////////////////////////////
typedef unsigned char   uint8_t;
typedef unsigned short  uint16_t;
typedef unsigned int    uint32_t;
typedef signed char     int8_t;
typedef signed short    int16_t;
typedef signed int      int32_t;

///TXeleFtdcMsgIdType 是一个message id类型
///备注: 输入报单为0x65, 报单操作为0x67, 组合为0x69(暂不支持)
///备注: 宏定义:XELE_MID_ORDER_INSERT/XELE_MID_ORDER_ACTION/XELE_MID_ORDER_COMB
typedef uint8_t TXeleFtdcMsgIdType;

/////////////////////////////////////////////////////////////////////////
///TXeleFtdcClientIndexType 是一个客户编号类型
/////////////////////////////////////////////////////////////////////////
typedef uint8_t TXeleFtdcClientIndexType;

/////////////////////////////////////////////////////////////////////////
///TXeleFtdcTokenType 是一个客户令牌类型
///备注: 报撤单时，可以通过API接口获取该字段值;客户端每次重新登录后需要重新获取该值.
/////////////////////////////////////////////////////////////////////////
typedef uint32_t TXeleFtdcTokenType;

/////////////////////////////////////////////////////////////////////////
///TXeleFtdcVolumeTotalOriginalType 是数量类型
/////////////////////////////////////////////////////////////////////////
typedef short TXeleFtdcVolumeTotalOriginalType;

/////////////////////////////////////////////////////////////////////////
///TFtdcSequenceNoType是一个序列号类型
///备注: 该字段暂未使用
/////////////////////////////////////////////////////////////////////////
typedef int TXeleFtdcSequenceNoType;

///TXeleFtdcReqIdType 是一个 request id类型
///备注: 柜台系统会在rsp响应中带回请求的requestid
typedef uint32_t TXeleFtdcReqIdType;

/////////////////////////////////////////////////////////////////////////
///TXeleFtdcOrderLocalNoType 是一个本地报单编号
/////////////////////////////////////////////////////////////////////////
typedef int   TXeleFtdcOrderLocalNoType;

/////////////////////////////////////////////////////////////////////////
///TFtdcPriceType是一个价格类型
/////////////////////////////////////////////////////////////////////////
typedef double TXeleFtdcPriceType;

/////////////////////////////////////////////////////////////////////////
///TXeleFtdcInstruIDType 是一个合约代码类型
/////////////////////////////////////////////////////////////////////////
typedef char TXeleFtdcInstruIDType[16];

///TXeleFtdcInstrumentIndexType 合约序号 类型
///备注: 报单时可以通过API接口获取合约序号，客户端每次重新登录后，需要重新调用API接口获取合约序号
/////////////////////////////////////////////////////////////////////////
typedef uint32_t TXeleFtdcInstrumentIndexType;

/////////////////////////////////////////////////////////////////////////
///TFtdcActionFlagType是一个操作标志类型
///备注: 当前只有上期/能源支持挂起和激活功能;修改功能所有交易所都暂不支持.
/////////////////////////////////////////////////////////////////////////
///删除
#define XELE_FTDC_AF_Delete '0'
///挂起
#define XELE_FTDC_AF_Suspend '1'
///激活
#define XELE_FTDC_AF_Active '2'
///修改
#define XELE_FTDC_AF_Modify '3'
typedef char TXeleFtdcActionFlagType;

/////////////////////////////////////////////////////////////////////////
///TXeleFtdcMinVolumeType 是一个最小成交量类型
/////////////////////////////////////////////////////////////////////////
typedef short TXeleFtdcMinVolumeType;

/////////////////////////////////////////////////////////////////////////
///TXeleFtdcExchangeFrontEnumType 是一个前置枚举信息类型
///备注: 0:不指定前置; 1~9:保留; 10~25:表示指定某个前置；
///备注: 当指定前置时，字段值为实际前置编号X+10，例如如果指定前置3，则该值配置为3+10=13;
/////////////////////////////////////////////////////////////////////////
typedef uint8_t TXeleFtdcExchangeFrontEnumType;

/////////////////////////////////////////////////////////////////////////
///TXeleFtdcActionLocalNoType 是一个本地报单编号类型
///备注: 该字段表示客户的本地撤单编号，柜台系统在回报中会带回，方便用户维护
/////////////////////////////////////////////////////////////////////////
typedef int TXeleFtdcActionLocalNoType;

/////////////////////////////////////////////////////////////////////////
///TXeleFtdcOrderSysNoType 是一个被撤单柜台编码
/////////////////////////////////////////////////////////////////////////
typedef int TXeleFtdcOrderSysNoType;

/////////////////////////////////////////////////////////////////////////
///TXeleFtdcInsertType 是一个报单录入类型
///备注: 为了统一各个交易所报单类型, 大商所的枚举值9和10、12和13等都是对应的FAK，效果是一样的;
///将买卖方向，开平，价格类型，有效期类型以及数量类型都放在一起变成枚举型,具体枚举值含义如下:
/*
---------------------------------------------------------------------------------------------------------------
CombHedgeFlag   OrderPriceType  TimeCondition  CombOffsetFlag    Direction   VolumeCondition  VAULE(枚举值)

只支持投机           只支持限价           当日有效(GFD)      开仓                买           任何数量             1
只支持投机           只支持限价           当日有效(GFD)      开仓                卖           任何数量             2
---------------------------------------------------------------------------------------------------------------
只支持投机           只支持限价           当日有效(GFD)      平仓                买           任何数量             3
只支持投机           只支持限价           当日有效(GFD)      平仓                卖           任何数量             4
---------------------------------------------------------------------------------------------------------------
只支持投机           只支持限价           当日有效(GFD)      平今仓               买           任何数量             5
只支持投机           只支持限价           当日有效(GFD)      平今仓               卖           任何数量             6
---------------------------------------------------------------------------------------------------------------
只支持投机           只支持限价           当日有效(GFD)      平昨仓               买           任何数量             7
只支持投机           只支持限价           当日有效(GFD)      平昨仓               卖           任何数量             8
---------------------------------------------------------------------------------------------------------------
只支持投机           只支持限价           立即完成(IOC)      开仓                买           任何数量             9    FAK(大商)   
只支持投机           只支持限价           立即完成(IOC)      开仓                买           最小数量             10   FAK(大商)
只支持投机           只支持限价           立即完成(IOC)      开仓                买           全部数量             11   FOK(大商)
---------------------------------------------------------------------------------------------------------------
只支持投机           只支持限价           立即完成(IOC)      开仓                卖           任何数量             12   FAK(大商)
只支持投机           只支持限价           立即完成(IOC)      开仓                卖           最小数量             13   FAK(大商)
只支持投机           只支持限价           立即完成(IOC)      开仓                卖           全部数量             14   FOK(大商)
---------------------------------------------------------------------------------------------------------------
只支持投机           只支持限价           立即完成(IOC)      平仓                买           任何数量             15   FAK(大商)
只支持投机           只支持限价           立即完成(IOC)      平仓                买           最小数量             16   FAK(大商)
只支持投机           只支持限价           立即完成(IOC)      平仓                买           全部数量             17   FOK(大商)
---------------------------------------------------------------------------------------------------------------
只支持投机           只支持限价           立即完成(IOC)      平仓                卖           任何数量             18   FAK(大商)
只支持投机           只支持限价           立即完成(IOC)      平仓                卖           最小数量             19   FAK(大商)
只支持投机           只支持限价           立即完成(IOC)      平仓                卖           全部数量             20   FOK(大商)
---------------------------------------------------------------------------------------------------------------
只支持投机           只支持限价           立即完成(IOC)      平今仓               买           任何数量             21   FAK(大商)
只支持投机           只支持限价           立即完成(IOC)      平今仓               买           最小数量             22   FAK(大商)
只支持投机           只支持限价           立即完成(IOC)      平今仓               买           全部数量             23   FOK(大商)
---------------------------------------------------------------------------------------------------------------
只支持投机           只支持限价           立即完成(IOC)      平今仓               卖           任何数量             24   FAK(大商)
只支持投机           只支持限价           立即完成(IOC)      平今仓               卖           最小数量             25   FAK(大商)
只支持投机           只支持限价           立即完成(IOC)      平今仓               卖           全部数量             26   FOK(大商)
---------------------------------------------------------------------------------------------------------------
只支持投机           只支持限价           立即完成(IOC)      平昨仓               买           任何数量             27   FAK(大商)
只支持投机           只支持限价           立即完成(IOC)      平昨仓               买           最小数量             28   FAK(大商)
只支持投机           只支持限价           立即完成(IOC)      平昨仓               买           全部数量             29   FOK(大商)
---------------------------------------------------------------------------------------------------------------
只支持投机           只支持限价           立即完成(IOC)      平昨仓               卖           任何数量             30   FAK(大商)
只支持投机           只支持限价           立即完成(IOC)      平昨仓               卖           最小数量             31   FAK(大商)
只支持投机           只支持限价           立即完成(IOC)      平昨仓               卖           全部数量             32   FOK(大商)
---------------------------------------------------------------------------------------------------------------
*/
/////////////////////////////////////////////////////////////////////////
typedef char TXeleFtdcInsertType;

/////////////////////////////////////////////////////////////////////////
///TXeleFtdcCombInstruIDType 是一个组合合约ID类型
/////////////////////////////////////////////////////////////////////////
typedef char TXeleFtdcCombInstruIDType[36];

/////////////////////////////////////////////////////////////////////////
///TXeleFtdcCombHedgeType 是一个组合投保标记类型
/////////////////////////////////////////////////////////////////////////
#define XELE_FTDC_SF_SPEC_SPEC		'1'			  //投机-投机
#define XELE_FTDC_SF_SPEC_HEDGE		'2'			  //投机-保值
#define XELE_FTDC_SF_HEDGE_HEDGE	'3'			  //保值-保值
#define XELE_FTDC_SF_HEDGE_SPEC		'4'			  //保值-投机
typedef char TXeleFtdcCombHedgeType;

/////////////////////////////////////////////////////////////////////////
///TXeleFtdcCombActionType 是一个组合状态类型
/////////////////////////////////////////////////////////////////////////
#define	XELE_FTDC_CS_COMB              '1'           //组合
#define	XELE_FTDC_CS_UNLOCK            '2'           //解锁
typedef char TXeleFtdcCombActionType;

/////////////////////////////////////////////////////////////////////////
///TXeleFtdcCombVolumeType 是一个组合数量类型
/////////////////////////////////////////////////////////////////////////
typedef uint32_t TXeleFtdcCombVolumeType;

#endif
